﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using Tibet.Entidades;
using Tibet.Logica.FabricaLogica;
using Tibet.Logica.Interfaces.MotorRegla;

namespace Tibet.Logica.Comandos.ComandoMotorRegla
{
    public class ConsultarEspacioOperadoresSinEspacio : ConsultarEspacioOperadores, IConsultarEspacioOperadores
    {
        public override void Ejecutar()
        //Revisa si los operadores no tienen espacios ni antes ni despues de ellos
        //Ejemplo: i=1;   if(r<=3)
        {
            int LineaActual = 0; //Linea actual que se esta leyendo.
            Resultado Resp = new Resultado(); //Objeto resultado que sera retornado.
            char[] operadores = { '=', '!', '<', '>', '~', '+', '-', '*', '/', '%', '^', '<', '&', '|', '?' }; //Arreglo con todos los operadores.
            int flagAux = 0; //Bandera que se utilizara para ver si se encontró operadores.
            //Inicializamos Resp asumiendo que el archivo cumple con la regla.
            Resp.Fecha = new DateTime();
            Resp.Fecha = DateTime.Now;
            Resp.Respuesta = true;
            Resp.Mensaje = "No se encontraron errores";
            Resp.Linea = 0;

            try
            {
                List<EntidadString> listaStr = new List<EntidadString>();

                for (int j = 0; j < ListaEntidad.Count; j++)
                {
                    listaStr.Add((EntidadString)ListaEntidad.ElementAt(j));
                }


                foreach (EntidadString linea in listaStr)   //Recorro la lista linea por linea
                {
                    LineaActual++;
                    string[] subCadenas = linea.Linea.Split(' '); //Separamos la linea por espacios.
                    foreach (string sc in subCadenas)       //Por cada sub cadena  
                    {
                        foreach (char a in operadores) //Checkeamos que si existe un operador en el primer caracter de la sub cadena
                        {
                            if (sc.Length > 0)
                                if (sc[0] == a)
                                    flagAux = 1;
                        }
                        if (flagAux == 1)
                        {
                            Resp.Linea = LineaActual;
                            Resp.Respuesta = false;
                            Resp.Mensaje = "Se separó un operador en la linea " + LineaActual;
                            Entidad = (Resp as Entidad);
                        }
                        foreach (char a in operadores) //Checkeamos que si existe un operador en el ultimo caracter de la sub cadena
                        {
                            if (sc.Length > 0)
                                if (sc[sc.Length - 1] == a)
                                    flagAux = 1;
                        }
                        if (flagAux == 1)
                        {
                            Resp.Linea = LineaActual;
                            Resp.Respuesta = false;
                            Resp.Mensaje = "Se separó un operador en la linea " + LineaActual;
                            Entidad = (Resp as Entidad);
                        }
                    }// end foreach(subcadena en linea)

                } // foreach(linea in archivo)
                Entidad = (Resp as Entidad);//Retornamos Respuesta
            }// End Try
            catch (Exception e)
            {
                Resp.Linea = LineaActual;
                Resp.Respuesta = false;
                Resp.Mensaje = "Ocurrio un error inesperado al leer la linea " + LineaActual + ". Error " + e.Message;
                Entidad = (Resp as Entidad);
            }

        }
    }
}
